#Boa:Frame:AsignaPTC

import wx
import wx.grid
import consultasBD
import utiles
from decimal import Decimal
import sincronizar_tabla
import os

def create(parent):
    return AsignaPTC(parent)

[wxID_ASIGNAPTC, wxID_ASIGNAPTCBUTTON1, wxID_ASIGNAPTCBUTTON2, 
 wxID_ASIGNAPTCBUTTON3, wxID_ASIGNAPTCBUTTON4, wxID_ASIGNAPTCCHOICE1, 
 wxID_ASIGNAPTCCOMBOBOX1, wxID_ASIGNAPTCGRID1, wxID_ASIGNAPTCPANEL1, 
 wxID_ASIGNAPTCSTATICTEXT1, wxID_ASIGNAPTCSTATICTEXT2, 
 wxID_ASIGNAPTCSTATICTEXT3, wxID_ASIGNAPTCSTATICTEXT4, 
 wxID_ASIGNAPTCSTATICTEXT5, wxID_ASIGNAPTCTEXTCTRL1, 
] = [wx.NewId() for _init_ctrls in range(15)]

class AsignaPTC(wx.Frame):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Frame.__init__(self, id=wxID_ASIGNAPTC, name='AsignaPTC',
              parent=prnt, pos=wx.Point(43, 124), size=wx.Size(928, 433),
              style=wx.DEFAULT_FRAME_STYLE,
              title='Asignacion de PTC a productos comprados')
        self.SetClientSize(wx.Size(920, 406))

        self.panel1 = wx.Panel(id=wxID_ASIGNAPTCPANEL1, name='panel1',
              parent=self, pos=wx.Point(0, 0), size=wx.Size(920, 406),
              style=wx.TAB_TRAVERSAL)

        self.grid1 = wx.grid.Grid(id=wxID_ASIGNAPTCGRID1, name='grid1',
              parent=self.panel1, pos=wx.Point(8, 16), size=wx.Size(904, 320),
              style=0)
        self.grid1.Bind(wx.grid.EVT_GRID_CELL_LEFT_DCLICK, self.OnDobleClick)
        self.grid1.Bind(wx.grid.EVT_GRID_CELL_RIGHT_DCLICK,
              self.OnDobleClickDerecho)

        self.button1 = wx.Button(id=wxID_ASIGNAPTCBUTTON1, label='Salir',
              name='button1', parent=self.panel1, pos=wx.Point(838, 344),
              size=wx.Size(75, 23), style=0)
        self.button1.Bind(wx.EVT_BUTTON, self.OnSalir, id=wxID_ASIGNAPTCBUTTON1)

        self.choice1 = wx.Choice(choices=["pendientes", "etiquetas",
              "devoluciones"], id=wxID_ASIGNAPTCCHOICE1, name='choice1',
              parent=self.panel1, pos=wx.Point(8, 344), size=wx.Size(144, 21),
              style=0)
        self.choice1.Bind(wx.EVT_CHOICE, self.OnChoiceCambia,
              id=wxID_ASIGNAPTCCHOICE1)

        self.button2 = wx.Button(id=wxID_ASIGNAPTCBUTTON2, label='Buscar',
              name='button2', parent=self.panel1, pos=wx.Point(160, 344),
              size=wx.Size(75, 23), style=0)
        self.button2.Bind(wx.EVT_BUTTON, self.OnBuscar,
              id=wxID_ASIGNAPTCBUTTON2)

        self.comboBox1 = wx.ComboBox(choices=[], id=wxID_ASIGNAPTCCOMBOBOX1,
              name='comboBox1', parent=self.panel1, pos=wx.Point(312, 368),
              size=wx.Size(104, 21), style=0, value='')
        self.comboBox1.SetLabel('')
        self.comboBox1.Show(False)

        self.button3 = wx.Button(id=wxID_ASIGNAPTCBUTTON3,
              label='Imprimir Etiquetas', name='button3', parent=self.panel1,
              pos=wx.Point(424, 344), size=wx.Size(112, 23), style=0)
        self.button3.Bind(wx.EVT_BUTTON, self.OnImprimir,
              id=wxID_ASIGNAPTCBUTTON3)

        self.staticText1 = wx.StaticText(id=wxID_ASIGNAPTCSTATICTEXT1,
              label='Cantidad', name='staticText1', parent=self.panel1,
              pos=wx.Point(248, 344), size=wx.Size(43, 13), style=0)

        self.textCtrl1 = wx.TextCtrl(id=wxID_ASIGNAPTCTEXTCTRL1,
              name='textCtrl1', parent=self.panel1, pos=wx.Point(312, 344),
              size=wx.Size(56, 21), style=0, value='')
        self.textCtrl1.SetEditable(False)

        self.staticText2 = wx.StaticText(id=wxID_ASIGNAPTCSTATICTEXT2,
              label='Doble click boton derecho  =>  ', name='staticText2',
              parent=self.panel1, pos=wx.Point(424, 344), size=wx.Size(175, 13),
              style=0)
        self.staticText2.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              'Tahoma'))

        self.button4 = wx.Button(id=wxID_ASIGNAPTCBUTTON4, label='DEVOLUCIONES',
              name='button4', parent=self.panel1, pos=wx.Point(424, 368),
              size=wx.Size(112, 23), style=0)
        self.button4.Bind(wx.EVT_BUTTON, self.ProcesarDevoluciones,
              id=wxID_ASIGNAPTCBUTTON4)

        self.staticText3 = wx.StaticText(id=wxID_ASIGNAPTCSTATICTEXT3,
              label='DEVOLUCION', name='staticText3', parent=self.panel1,
              pos=wx.Point(600, 344), size=wx.Size(70, 13), style=0)
        self.staticText3.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              'Tahoma'))

        self.staticText4 = wx.StaticText(id=wxID_ASIGNAPTCSTATICTEXT4,
              label='ANULA DEVOLUCION', name='staticText4', parent=self.panel1,
              pos=wx.Point(600, 344), size=wx.Size(111, 13), style=0)
        self.staticText4.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              'Tahoma'))

        self.staticText5 = wx.StaticText(id=wxID_ASIGNAPTCSTATICTEXT5,
              label='Temporada', name='staticText5', parent=self.panel1,
              pos=wx.Point(248, 368), size=wx.Size(54, 13), style=0)
        self.staticText5.Show(False)

    def __init__(self, parent):
        self._init_ctrls(parent)
        self.choice1.SetSelection(0)
        self.llenarCombo()
        self.crearGrilla()
        self.llenarGrilla()

    def llenarCombo(self):
        anio = int(utiles.obtenerFecha("Y-m-d")[:4])
        mes = int(utiles.obtenerFecha("Y-m-d")[5:7])
        dia = int(utiles.obtenerFecha("Y-m-d")[-2:])
        anioanterior = anio -1
        anioactual = anio
        aniosiguiente = anio + 1
        self.comboBox1.Append("INVIERNO"+str(anioanterior))
        self.comboBox1.Append("VERANO"+str(anioanterior))
        self.comboBox1.Append("INVIERNO"+str(anioactual))
        self.comboBox1.Append("VERANO"+str(anioactual))
        self.comboBox1.Append("INVIERNO"+str(aniosiguiente))
        self.comboBox1.Append("VERANO"+str(aniosiguiente))
        self.comboBox1.SetEditable(False)

    def crearGrilla(self):
        columnas = ['Nro\nProv.','Nombre','Fecha\nFactura','Numero\nFactura','Codigo\nSussan','Descripcion','Estacion','Grupo','Costo']
        self.grid1.CreateGrid(1,len(columnas))
        for i, col in enumerate(columnas): 
            self.grid1.SetColLabelValue(i, col)
        self.ajustarAnchoColumnas()
        self.grid1.EnableEditing(False)
        self.grid1.SetSelectionMode(wx.grid.Grid.wxGridSelectRows)
        self.grid1.Refresh()
        
    def ajustarAnchoColumnas(self):
        for y in xrange(self.grid1.GetNumberCols()):
            self.grid1.AutoSizeColumn(y,True)

    def limpiar(self):
        self.grid1.ClearGrid()
        for fila in xrange(self.grid1.GetNumberRows()):
            self.grid1.DeleteRows()
        self.grid1.AppendRows()

    def OnSalir(self, event):
        self.Close()

    def modificarColumnas(self,cantidad=0):
        if cantidad == 0:
            for col in xrange(self.grid1.GetNumberCols()):
                self.grid1.DeleteCols()
            return
        for col in xrange(cantidad):
            self.grid1.AppendCols()

    def buscarDatos(self):
        resultados = ()
        if self.choice1.GetSelection()==0:
            self.button3.Show(False)
            self.button4.Show(False)
            self.staticText2.Show(True)
            self.staticText3.Show(True)
            self.staticText4.Show(False)
            self.staticText5.Show(False)
            self.comboBox1.Show(False)
            self.SetTitle("Asignacion de PTC a productos comprados")
            condicion = "WHERE color='zZz' AND talle='ZzZ' "
            resultados = self.buscarPendientes(condicion)
            #NroProv,Nombre,FechaFactura,NumeroFactura,CodigoSussan,Descripcion,Estacion,Grupo,Costo,PVenta,Pendiente,ID
            #0       1      2            3             4            5           6        7     8     9      10        11
            columnas = ['Nro\nProv.','Nombre','Fecha\nFactura','Numero\nFactura','Codigo\nSussan','Descripcion','Estacion','Grupo','Costo','P.Venta','Pendiente','ID']
            self.modificarColumnas()
            self.modificarColumnas(len(columnas))
            for i, col in enumerate(columnas): 
                self.grid1.SetColLabelValue(i, col)
            self.grid1.EnableEditing(False)
            self.ajustarAnchoColumnas()
        elif self.choice1.GetSelection()==1:
            self.button3.Show(True)
            self.button4.Show(False)
            self.staticText2.Show(False)
            self.staticText3.Show(False)
            self.staticText4.Show(False)
            self.staticText5.Show(False)
            self.comboBox1.Show(False)
            self.SetTitle("Impresion de Etiquetas")
            condicion = "WHERE impreso = '0' "
            resultados = self.buscarEtiquetas(condicion)
            #CodSussan,PTC,Descripcion,Talle,Color,NombreColor,idproveedor,precio,cantidad,impreso
            #0         1   2           3     4     5           6           7      8        9
            columnas = ['Cod.Sussan','PTC','Descripcion','Talle','Color','Nombre Color','ID Proveedor','Precio','Cantidad']
            self.modificarColumnas()
            self.modificarColumnas(len(columnas))
            for i, col in enumerate(columnas): 
                self.grid1.SetColLabelValue(i, col)
            self.grid1.EnableEditing(False)
            self.ajustarAnchoColumnas()
        else: #DEVOLUCIONES
            self.button3.Show(False)
            self.button4.Show(True)
            self.staticText2.Show(True)
            self.staticText3.Show(False)
            self.staticText4.Show(True)
            self.staticText5.Show(True)
            self.comboBox1.Show(True)
            self.SetTitle("Devolucion de Productos sin asignar PTC")
            condicion = "WHERE estado='0' "
            resultados = self.buscarDevoluciones(condicion)
        #ID,Nombre,FechaFactura,NumeroFactura,id,CodArtProv,CodSussan,Descripcion,Estacion,Grupo,Costo,CantDevuelta
        #0  1      2            3             4  5          6         7           8        9     10    11
            columnas = ['ID','Nombre','Fecha\nFactura','Numero\nFactura','id\nFactura','Cod.Art.\nProv.','Codigo\nSussan','Descripcion','Estacion','Grupo','Costo','Cant']
            self.modificarColumnas()
            self.modificarColumnas(len(columnas))
            for i, col in enumerate(columnas):
                self.grid1.SetColLabelValue(i, col)
            self.grid1.EnableEditing(False)
            self.ajustarAnchoColumnas()
        return resultados
        
    def buscarPendientes(self,condicion):
        r01 = "SELECT c.idcompras_items,pv.idproveedor,pv.nombre,c.codsussan,p.descri, "
        r02 = "       cm.nrofactura, cm.fechafactura, "
        r03 = "       p.estacion,p.anio,p.grupo,gr.nombregrupo, "
        r04 = "       p.preciolt2 as costo,p.preciolt1 as pventa, "
        r05 = "       c.cantidad, cm.idfactura "
        r06 = "FROM compras_items c, productos p,proveedor pv, "
        r07 = "     grupos gr, compras cm "
        r08 = condicion
        r09 = "      AND p.codsussan=c.codsussan "
        r10 = "      AND p.proveedor=pv.idproveedor "
        r11 = "      AND p.grupo=gr.idgrupo "
        r12 = "      AND c.idfactura=cm.idfactura "
        #r13 = "ORDER BY pv.nombre ASC,c.codsussan ASC,cm.nrofactura ASC "
        sql = r01+r02+r03+r04+r05+r06+r07+r08+r09+r10+r11+r12#+r13
        resultados = consultasBD.ordenCrudaDict(sql)
        if len(resultados)==0 or resultados==() or resultados==None:
            return ()
        return resultados

    def buscarEtiquetas(self,condicion):
        r01 = "SELECT e.id,e.codsussan,e.ptc,e.descripcion,e.talle,e.color, "
        r02 = "       e.nombrecolor,e.idproveedor,e.cantidad,e.impreso, "
        r03 = "       p.preciolt1 as precio "
        r04 = "FROM etiquetas e, productos p "
        r05 = condicion
        r06 = "     AND p.codsussan=e.codsussan "
        sql = r01+r02+r03+r04+r05+r06
        resultados = consultasBD.ordenCrudaDict(sql)
        if len(resultados)==0 or resultados==() or resultados==None:
            return ()
        return resultados

    def buscarDevoluciones(self,condicion):
        r01 = "SELECT * "
        r02 = "FROM devoluciones "
        r03 = condicion
        r04 = "ORDER BY nombre,idfactura,codsussan "
        sql = r01+r02+r03+r04
        resultados = consultasBD.ordenCrudaDict(sql)
        if len(resultados)==0 or resultados==() or resultados==None:
            return ()
        return resultados

    def llenarGrilla(self):
        resultados = self.buscarDatos()
        total = 0
        if self.choice1.GetSelection()==0:        
        #Nro prov,Nombre,Fecha,NroFactura,CodSussan,Descr,Estacion,Grupo,Costo,P.Venta,Cantidad
        #0        1      2     3          4         5     6        7     8     9       10
            for fila,item in enumerate(resultados):
                self.grid1.SetCellValue(fila,0,str(item["idproveedor"]))
                self.grid1.SetCellValue(fila,1,str(item["nombre"]))
                fecha = str(item["fechafactura"])[:10]
                fecha = utiles.invertirFecha2(fecha)
                self.grid1.SetCellValue(fila,2,fecha)
                self.grid1.SetCellAlignment(fila,2,wx.ALIGN_CENTRE,wx.ALIGN_CENTRE)
                self.grid1.SetCellValue(fila,3,str(item["nrofactura"])+" / "+str(item["idfactura"]))
                self.grid1.SetCellValue(fila,4,str(item["codsussan"]))
                self.grid1.SetCellValue(fila,5,str(item["descri"]))
                self.grid1.SetCellValue(fila,6,str(item["estacion"])+" / "+str(item["anio"]))
                self.grid1.SetCellValue(fila,7,str(item["nombregrupo"])+" / "+str(item["grupo"]))
                self.grid1.SetCellValue(fila,8,str(item["costo"]))
                self.grid1.SetCellAlignment(fila,8,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
                self.grid1.SetCellValue(fila,9,str(item["pventa"]))
                self.grid1.SetCellAlignment(fila,9,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
                total+= item["cantidad"]
                self.grid1.SetCellValue(fila,10,str(item["cantidad"]))
                self.grid1.SetCellAlignment(fila,10,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
                self.grid1.SetCellValue(fila,11,str(item["idcompras_items"]))
                self.grid1.SetCellAlignment(fila,11,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
                self.grid1.AppendRows()
        elif self.choice1.GetSelection()==1:
            #CodSussan,PTC,Descripcion,Talle,Color,NombreColor,idproveedor,precio,cantidad,impreso
            #0         1   2           3     4     5           6           7      8        9
            for fila,item in enumerate(resultados):
                self.grid1.SetCellValue(fila,0,item["codsussan"])
                self.grid1.SetCellValue(fila,1,item["ptc"])
                self.grid1.SetCellValue(fila,2,item["descripcion"])
                self.grid1.SetCellValue(fila,3,item["talle"])
                self.grid1.SetCellValue(fila,4,item["color"])
                self.grid1.SetCellValue(fila,5,item["nombrecolor"])
                self.grid1.SetCellValue(fila,6,item["idproveedor"])
                self.grid1.SetCellValue(fila,7,str(item["precio"]))
                self.grid1.SetCellAlignment(fila,7,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
                total+= item["cantidad"]
                self.grid1.SetCellValue(fila,8,str(item["cantidad"]))
                self.grid1.SetCellAlignment(fila,8,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
                self.grid1.AppendRows()
        else: #DEVOLUCIONES
        #ID,Nombre,FechaFactura,NumeroFactura,id,CodArtProv,CodSussan,Descripcion,Estacion,Grupo,Costo,CantDevuelta
        #0  1      2            3             4  5          6         7           8        9     10    11
            for fila,item in enumerate(resultados):
                self.grid1.SetCellValue(fila,0,str(item["id"]))
                self.grid1.SetCellValue(fila,1,str(item["nombre"])+" / "+str(item["idproveedor"]))
                self.grid1.SetCellValue(fila,2,item["fechafactura"])
                self.grid1.SetCellAlignment(fila,2,wx.ALIGN_CENTRE,wx.ALIGN_CENTRE)
                self.grid1.SetCellValue(fila,3,str(item["nrofactura"]))
                self.grid1.SetCellValue(fila,4,str(str(item["idfactura"])))
                codsussan,codartprov = str(item["codsussan"]).split(" / ")
                self.grid1.SetCellValue(fila,5,codartprov)
                self.grid1.SetCellValue(fila,6,codsussan)
                self.grid1.SetCellValue(fila,7,str(item["descri"]))
                self.grid1.SetCellValue(fila,8,str(item["estacion"])+" / "+str(item["anio"]))
                self.grid1.SetCellValue(fila,9,str(item["nombregrupo"])+" / "+str(item["grupo"]))
                self.grid1.SetCellValue(fila,10,str(item["costo"]))
                self.grid1.SetCellAlignment(fila,10,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
                total+= item["cantidad"]
                self.grid1.SetCellValue(fila,11,str(item["cantidad"]))
                self.grid1.SetCellAlignment(fila,11,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
                self.grid1.AppendRows()
            
        self.ajustarAnchoColumnas()
        self.textCtrl1.SetLabel(str(total))
        return

    def OnBuscar(self, event):
        self.limpiar()
        self.llenarGrilla()

    def OnDobleClick(self, event):
        fila = self.grid1.GetGridCursorRow()
        idregistro = self.grid1.GetCellValue(fila,11)
        if self.grid1.GetCellValue(fila,0)=="":
            return
        if self.choice1.GetSelection()==0:
            #pendiente
            self.asignarPTC(fila,idregistro)
        else:
            #faltante
            #self.asignarPTC(fila)
            pass

    def asignarPTC(self,fila,idregistro):
        lista = {}
        #Nro prov,Nombre,Fecha,NroFactura,CodSussan,Descr,Estacion,Grupo,Costo,P.Venta,Cantidad
        #0        1      2     3          4         5     6        7     8     9       10
        lista["idproveedor"]=self.grid1.GetCellValue(fila,0)
        lista["nombre"]=self.grid1.GetCellValue(fila,1)
        lista["fechafactura"]=self.grid1.GetCellValue(fila,2)
        lista["nrofactura"]=self.grid1.GetCellValue(fila,3).split(" / ")[0]
        lista["codsussan"]=self.grid1.GetCellValue(fila,4)
        lista["descripcion"]=self.grid1.GetCellValue(fila,5)
        lista["estacion"]=self.grid1.GetCellValue(fila,6)
        lista["grupo"]=self.grid1.GetCellValue(fila,7)
        lista["costo"]=self.grid1.GetCellValue(fila,8)
        lista["pventa"]=self.grid1.GetCellValue(fila,9)
        lista["cantidad"]=self.grid1.GetCellValue(fila,10)
        lista["idfactura"]=self.grid1.GetCellValue(fila,3).split(" / ")[1]
        
        import ComprasAsignaPTC2
        dlg = ComprasAsignaPTC2.asignar(self,lista,idregistro)
        try:
            dlg.ShowModal()
        finally:
            dlg.Destroy()
        self.OnBuscar(None)

    def OnImprimir(self, event):
        try:
            self.imprimirEnLaser()
            for fila in range(self.grid1.GetNumberRows()):
                if self.grid1.GetCellValue(fila,0)== "":
                    continue
            #CodSussan,PTC,Descripcion,Talle,Color,NombreColor,idproveedor,precio,cantidad,impreso
            #0         1   2           3     4     5           6           7      8        9
                codsussan = self.grid1.GetCellValue(fila,0)
                ptc = self.grid1.GetCellValue(fila,1)
                tablaSQL = "etiquetas"
                camposSQL = " impreso='1'"
                condicionSQL = "codsussan='%s' AND ptc='%s'" % (codsussan,ptc) 
                consultasBD.executaUpdateSQL(None,tablaSQL,camposSQL,condicionSQL)
            self.OnBuscar(None)
        except:
            print "Error al imprimir"

    def imprimirEnLaser(self):
        def generarImpresion(archivo,datos):
            archivo_salida = open(archivo, 'w')
            archivo_salida.write(datos)
            archivo_salida.close()
            ruta = "type "+archivo+" > prn"
            os.system(ruta)
            archivo_salida = open(archivo, 'w')
            archivo_salida.write("")
            archivo_salida.close()
            return

        #cantidad de etiquetas que hay que imprimir
        totalesEtiqueta=int(self.textCtrl1.GetLabel())
        #cantidad de etiquetas que tiene un producto, en una fila
        cantidad = 0
        #resto Etiquetas que quedan para imprimir
        resto=0
        #cambio Si va a la izq o a la derecha de las impresorasesa 
        cambio=1
        #cerrojo para el if y for
        pasa=0

		#recorre todas la grilla y saca todos los codsussan distintos con sus cantidades
		#para enviar a hacer etiquetas
        for z in xrange(self.grid1.GetNumberRows()):
            if (self.grid1.GetCellValue(z,0) != ""):
            #CodSussan,PTC,Descripcion,Talle,Color,NombreColor,idproveedor,precio,cantidad,impreso
            #0         1   2           3     4     5           6           7      8        9
                print "Generando..."+ self.grid1.GetCellValue(z,0)
                cantidad = int(self.grid1.GetCellValue(z,8))
                codsussan = self.grid1.GetCellValue(z,0)
                descri = self.grid1.GetCellValue(z,2)
                talle = self.grid1.GetCellValue(z,3).upper()
                color = self.grid1.GetCellValue(z,4)
                proveedor = self.grid1.GetCellValue(z,6)
                precioVenta = str(Decimal(self.grid1.GetCellValue(z,7)).quantize(Decimal('0.10')))
                nombreColor = self.grid1.GetCellValue(z,5)
                id_producto_talle_color = self.grid1.GetCellValue(z,1)
            
                for x in xrange(cantidad):
                    print "Linea",z,"Etiquetas",x
                    if (cambio==1): 
                        txt_file = open("sus3.txt", 'r')
                        self.txt = txt_file.read()
                        txt_file.close()
                        self.txt = self.txt.replace("$descrip1",descri[:20])
                        self.txt = self.txt.replace("$talle1",talle)
                        self.txt = self.txt.replace("$color1",color)
                        self.txt = self.txt.replace("$codsus1",codsussan)
                        self.txt = self.txt.replace("$ptc1",id_producto_talle_color)
                        self.txt = self.txt.replace("$proveedor1",proveedor)
                        self.txt = self.txt.replace("$precio1","$" + str(precioVenta))
                        self.txt = self.txt.replace("$descrico1",str(nombreColor[:20]))
                        cambio=2
                        totalesEtiqueta=totalesEtiqueta-1
                        if totalesEtiqueta==0:
                            generarImpresion('etiqueta1_reemplazada.txt',self.txt)
                    else:
                        self.txt = self.txt.replace("$descrip2",descri[:20])
                        self.txt = self.txt.replace("$talle2",talle)
                        self.txt = self.txt.replace("$color2",color)
                        self.txt = self.txt.replace("$codsus2",codsussan)
                        self.txt = self.txt.replace("$ptc2",id_producto_talle_color)
                        self.txt = self.txt.replace("$proveedor2",proveedor)
                        self.txt = self.txt.replace("$precio2","$" + str(precioVenta))
                        self.txt = self.txt.replace("$descrico2",str(nombreColor[:20]))
                        cambio=1
                        totalesEtiqueta=totalesEtiqueta-1
                        if totalesEtiqueta==0 :
                            generarImpresion('etiqueta1_reemplazada.txt',self.txt)
                            print "Salio x break"
                            break # sale porque termina, por ejemplo , cuando son 2 o 4 etiquetas
                        #sigue imprimiendo porque faltan mas etiquetas del mismo codsussan
                        generarImpresion('etiqueta1_reemplazada.txt',self.txt)
                        print "Final etiqueta 2"
        generarImpresion('etiqueta1_reemplazada.txt',self.txt)
        #fin impresion con laser

    def buscarCodigoArtProvedor(self,codsussan):
        sql = "SELECT codartprov FROM producto_codartprov WHERE codsussan='"+codsussan+"' "
        resultado = consultasBD.ordenCruda(sql)
        if len(resultado)==0 or resultado==None or resultado==():
            return ""
        return resultado[0][0]

    def buscarPrecioCompra(self,codsussan):
        sql = "SELECT preciocompra FROM productos WHERE codsussan='"+codsussan+"' "
        resultado = consultasBD.ordenCruda(sql)
        if len(resultado)==0 or resultado==None or resultado==():
            return Decimal("0.00")
        return resultado[0][0]

    def buscarFormaDocumento(self,idfactura):
        sql = "SELECT en1oen2 FROM compras WHERE idfactura='"+idfactura+"' "
        resultado = consultasBD.ordenCruda(sql)
        if len(resultado)==0 or resultado==None or resultado==():
            return "1"
        return resultado[0][0]

    def OnChoiceCambia(self, event):
        self.OnBuscar(None)

    def OnDobleClickDerecho(self, event):
        fila = self.grid1.GetGridCursorRow()
        if self.grid1.GetCellValue(fila,0)=="":
            return
        if self.choice1.GetSelection() == 0:
            self.marcaDevolucion(fila)
        if self.choice1.GetSelection() == 2:
            self.desmarcaDevolucion(fila)

    def buscarIVA(self,idfactura):
        sql = "SELECT porIVA FROM compras WHERE idfactura='"+str(idfactura)+"' "
        resultado = consultasBD.ordenCruda(sql)
        try:
            return str(resultado[0][0])
        except:
            print "--> error en retorno valor IVA",resultado
            return "0.00"

    def marcaDevolucion(self, fila):
        #Nro prov,Nombre,Fecha,NroFactura,CodSussan,Descr,Estacion,Grupo,Costo,P.Venta,Cantidad
        #0        1      2     3          4         5     6        7     8     9       10
        codsussan = self.grid1.GetCellValue(fila,4)
        descripcion = self.grid1.GetCellValue(fila,5)
        proveedor = self.grid1.GetCellValue(fila,1)
        cantidad = self.grid1.GetCellValue(fila,10)
        factura,idfactura = (self.grid1.GetCellValue(fila,3)).split(" / ")
        preciocompra = self.grid1.GetCellValue(fila,8)
        import Dialog2
        texto = "DEVOLUCION DE MERCADERIA: \n"
        texto+= "Si confirma, se devolvera el producto al proveedor\n"
        texto+= "=> "+proveedor+"\n"
        texto+= "=> documento: "+factura+"\n"
        texto+= "=> producto:  "+codsussan+" - "+descripcion+"\n"
        texto+= "=> cantidad:  "+cantidad+"\n\n"
        texto+= "ACEPTAR = si                           CANCELAR = no"
        confirma = Dialog2.Dialog2(self, texto, default="no")
        confirma.ShowModal()
        if not confirma.getSeleccion():
            return
        #Nro prov,Nombre,Fecha,NroFactura,CodSussan,Descr,Estacion,Grupo,Costo,P.Venta,Cantidad
        #0        1      2     3          4         5     6        7     8     9       10
        idproveedor = self.grid1.GetCellValue(fila,0)
        nombre = self.grid1.GetCellValue(fila,1)
        fechafactura = self.grid1.GetCellValue(fila,2)
        nrofactura,idfactura = (self.grid1.GetCellValue(fila,3)).split(" / ")
        en1oen2 = self.buscarFormaDocumento(idfactura)
        codsussan = self.grid1.GetCellValue(fila,4)
        descri = self.grid1.GetCellValue(fila,5)
        estacion,anio = (self.grid1.GetCellValue(fila,6)).split(" / ")
        nombregrupo,grupo = (self.grid1.GetCellValue(fila,7)).split(" / ")
        preciocompra = self.grid1.GetCellValue(fila,8)
        pventa = self.grid1.GetCellValue(fila,9)
        cantidad = self.grid1.GetCellValue(fila,10)
        codartproveedor = self.buscarCodigoArtProvedor(codsussan)
        codsussan = codsussan + " / " + codartproveedor
        porIVA = self.buscarIVA(idfactura)
        
        try:
            consultasBD.begin()

            r01 = "INSERT INTO devoluciones(idproveedor,nombre,fechafactura,"
            r02 = "            nrofactura,en1oen2,idfactura,codsussan,descri,"
            r03 = "            estacion,anio,nombregrupo,grupo,costo,pventa,"
            r04 = "            cantidad,estado,porIVA) "
            r05 = "VALUES ("
            r06 = "'%s', '%s', '%s', " % (idproveedor,nombre,fechafactura)
            r07 = "'%s', '%s', '%s', '%s'," % (nrofactura,en1oen2,idfactura,codsussan)
            r08 = "'%s', '%s', '%s', '%s'," % (descri,estacion,anio,nombregrupo)
            r09 = "'%s', '%s', '%s', '%s'," % (grupo,preciocompra,pventa,cantidad)
            r10 = "'0','%s')" % (porIVA)
            sql = r01+r02+r03+r04+r05+r06+r07+r08+r09+r10
            consultasBD.executaSinCommit(None, sql)
            
            #preparar datos para modificar
            idfactura = idfactura
            codsussanOLD = self.grid1.GetCellValue(fila,4)
            codsussan = "DEV"
            color = descripcion
            talle = "*"+codartproveedor
            cantidad = cantidad
            costounidad = preciocompra

            r1 = "UPDATE compras_items SET codsussan='DEV', talle='"+talle+"', "
            r2 = "                         color='"+color+"' "
            r3 = "WHERE idfactura='"+idfactura+"' AND cantidad='"+cantidad+"' "
            r4 = "      AND costounidad='"+preciocompra+"' "
            r5 = "      AND talle='ZzZ' AND color='zZz' "
            sql = r1+r2+r3+r4+r5
            sincronizar_tabla.addChange(sql=sql)
            consultasBD.executaSinCommit(None, sql)

            consultasBD.commit()
            
            utiles.mensaje(None,"Producto marcado para devolucion")
        except:
            consultasBD.rollback()
            utiles.mensaje(None,"Error al intentar marcar el producto")

        self.OnBuscar(None)

    def desmarcaDevolucion(self,fila):
        #ID,Nombre,FechaFactura,NumeroFactura,id,CodArtProv,CodSussan,Descripcion,Estacion,Grupo,Costo,CantDevuelta
        #0  1      2            3             4  5          6         7           8        9     10    11

        id = self.grid1.GetCellValue(fila,0)
        nombre,idproveedor = (self.grid1.GetCellValue(fila,1)).split(" / ")
        idfactura = self.grid1.GetCellValue(fila,4)
        costounidad = self.grid1.GetCellValue(fila,10)
        cantidad = self.grid1.GetCellValue(fila,11)
        codsussan = self.grid1.GetCellValue(fila,6)
        codartprov = self.grid1.GetCellValue(fila,5)
        color = self.grid1.GetCellValue(fila,7)

        try:
            consultasBD.begin()

            r1 = "UPDATE compras_items SET codsussan='"+codsussan+"', talle='ZzZ', "
            r2 = "                         color='zZz' "
            r3 = "WHERE idfactura='"+idfactura+"' AND cantidad='"+cantidad+"' "
            r4 = "      AND costounidad='"+costounidad+"' "
            r5 = "      AND talle='*"+codartprov+"' AND color='"+color+"' "
            sql = r1+r2+r3+r4+r5
            sincronizar_tabla.addChange(sql=sql)
            consultasBD.executaSinCommit(None, sql)

            r1 = "UPDATE devoluciones SET estado='1' "
            r2 = "WHERE id='"+id+"' "
            sql = r1+r2
            consultasBD.executaSinCommit(None, sql)
            
            consultasBD.commit()
            
            utiles.mensaje(None,"Producto desmarcado")
        except:
            consultasBD.rollback()
            utiles.mensaje(None,"No pudo desmarcarse el producto")

        self.OnBuscar(None)

    def ProcesarDevoluciones(self, event):
        if self.grid1.GetNumberRows()==0:
            utiles.mensaje(None,"No hay datos que procesar")
            return
        if self.comboBox1.GetLabel()=="":
            utiles.mensaje(None,"Debe indicar temporada")
            self.comboBox1.SetFocus()
            return
        print "Procesando Devoluciones"
        sql = "SELECT DISTINCT idproveedor FROM devoluciones WHERE estado='0'"
        myListaProveedores = consultasBD.ordenCrudaDict(sql)
        listaProveedores = []
        for item in myListaProveedores:
            aux = {}
            aux["idproveedor"]=item["idproveedor"]+" / 1"
            listaProveedores.append(aux)
            aux = {}
            aux["idproveedor"]=item["idproveedor"]+" / 2"
            listaProveedores.append(aux)

        motivos = {}

        f=open("c:\\erpsussan.doc\\reporte-devoluciones.html","w")
        print "Generando reporte impreso"
        for item in listaProveedores:
            idproveedor,tipo = (item["idproveedor"]).split(" / ")
            r1 = "SELECT * FROM devoluciones "
            r2 = "WHERE estado='0' AND idproveedor='"+idproveedor+"' "
            r3 = "      AND en1oen2='"+str(tipo)+"' "
            r4 = "ORDER BY idfactura,codsussan "
            sql = r1+r2+r3+r4
            resultados = consultasBD.ordenCrudaDict(sql)
            if len(resultados)==0 or resultados==None or resultados==():
                continue

            proveedor = resultados[0]["nombre"]+" / "+resultados[0]["idproveedor"]
            self.observaciones = ""
            import ComprasDevolucionObservaciones
            observaciones = ComprasDevolucionObservaciones.Dialog1(None, proveedor)
            try:
                observaciones.ShowModal()
                self.observaciones = observaciones.getObservacion()
            finally:
                observaciones.Destroy()

            motivos[idproveedor+" / "+tipo] = self.observaciones
            
            self.imprimirDevoluciones(resultados,f)

        f.close()

        try:
            consultasBD.begin()

            #GRABANDO en archivos
            print "Actualizando archivos"
            sucursal = utiles.getSucursalActiva()
            for item in listaProveedores:
                idproveedor,tipo = (item["idproveedor"]).split(" / ")
                r1 = "SELECT * FROM devoluciones "
                r2 = "WHERE estado='0' AND idproveedor='"+idproveedor+"' "
                r3 = "      AND en1oen2='"+tipo+"' "
                r4 = "ORDER BY idfactura,codsussan "
                sql = r1+r2+r3+r4
                resultados = consultasBD.ordenCrudaDict(sql)
                if len(resultados)==0 or resultados==None or resultados==():
                    continue

                totalCantidad = 0
                totalCosto = 0
                totalIVA = 0
                idDevolucion =  utiles.secuencia("compras_devolucion", sucursal)
                idProveedor = idproveedor
                fecha = utiles.obtenerFecha("Y-m-d h:m:s")
                causaDevolucion = motivos[idproveedor+" / "+tipo]
                for producto in resultados:
                    ptc = "DEV"
                    codsussan,codartprov = (producto["codsussan"]).split(" / ")
                    talle = "DEV"
                    color = "DEV"
                    cantidad = int(producto["cantidad"])
                    totalCantidad+= cantidad
                    monto = producto["costo"]
                    en1oen2 = producto["en1oen2"]
                    otro = "en1oen2="+str(en1oen2)+",codartprov="+codartprov
                    totalCosto+= monto*cantidad
                    if str(en1oen2) == "1":
                        porIVA = Decimal(producto["porIVA"])
                        totalIVA+= monto*cantidad*porIVA/Decimal("100.00")
                        totalIVA = totalIVA.quantize(Decimal("0.10"))
                    
                    r1 = "INSERT INTO comprasdevoluciones_items(idDevolucion, \n"
                    r2 = "            idProveedor,fecha,ptc,codsussan,talle, \n"
                    r3 = "            color,cantidad,monto,otro) \n"
                    r4 = "VALUES ('%s','%s','%s', \n" % (idDevolucion,idProveedor,fecha)
                    r5 = "        '%s','%s','%s','%s', \n" % (ptc,codsussan,talle,color)
                    r6 = "        '%s','%s','%s') \n" % (str(cantidad),str(monto),otro)
                    sql = r1+r2+r3+r4+r5+r6
                    consultasBD.executaSinCommit(None, sql)
                    
                    id = producto["id"]
                    sql = "UPDATE devoluciones SET estado='1' WHERE id='"+str(id)+"' \n"
                    consultasBD.executaSinCommit(None, sql)

                auditoria = fecha
                cantProductos = str(totalCantidad)
                montoDevolucion = str(totalCosto+totalIVA)

                r1 = "INSERT INTO comprasdevoluciones(idDevolucion,idProveedor, \n"
                r2 = "            fecha,cantProductos,montoDevolucion, \n"
                r3 = "            causaDevolucion,auditoria) \n"
                r4 = "VALUES ('%s','%s','%s', \n" % (idDevolucion,idProveedor,fecha)
                r5 = "        '%s','%s', \n" % (cantProductos,montoDevolucion)
                r6 = "        '%s','%s') \n" % (causaDevolucion,auditoria)
                sql = r1+r2+r3+r4+r5+r6
                consultasBD.executaSinCommit(None, sql)

                idoperacion = "DEVOLUCION"
                idforma1o2 = tipo
                if idforma1o2 == "1":
                    monto1 = montoDevolucion
                    monto2 = "0.00"
                    tipodoc = "7"
                else:
                    monto1 = "0.00"
                    monto2 = montoDevolucion
                    tipodoc = "6"
                nrofactura = "*"
                cantproductos = cantProductos
                observaciones = causaDevolucion
                operador = ""
                temporada = self.comboBox1.GetLabel()
                #saca el nro de registro
                sql2 = "SELECT idregistro FROM proveedor WHERE idproveedor='%s'" % str(idproveedor)
                resultado2 = consultasBD.ordenCrudaResultDict(sql2)
                idregistro = int(resultado2["idregistro"])+1
                interno = "0"
                
                r1 = "INSERT INTO comprasaldos(idoperacion,fecha,idproveedor, \n"
                r2 = "            monto1,monto2,tipodoc,nrofactura,cantproductos, \n"
                r3 = "            idforma1o2,observaciones,operador,temporada, \n"
                r4 = "            idregistro,interno) VALUES (\n"
                r5 = "'%s','%s','%s','%s', \n" % (idoperacion,fecha,idproveedor,monto1)
                r6 = "'%s','%s','%s','%s', \n" % (monto2,tipodoc,nrofactura,cantproductos)
                r7 = "'%s','%s','%s','%s', \n" % (idforma1o2,observaciones,operador,temporada)
                r8 = "'%s','%s') \n" % (idregistro,interno)
                sql = r1+r2+r3+r4+r5+r6+r7+r8
                consultasBD.executaSinCommit(None, sql)

            consultasBD.commit()

            #generando documento para imprimir
            import os
            os.system("taskkill /IM firefox.exe /F")
            os.system("c:\\explorer.lnk c:\\erpsussan.doc\\reporte-devoluciones.html")
        except:
            utiles.mensaje(None,"Error en la grabacion")
            consultasBD.rollback()

        self.OnBuscar(None)

    def imprimirDevoluciones(self,items,f):
        print "Imprimir Devoluciones para",items[0]["nombre"]
        #ID,Nombre,FechaFactura,NumeroFactura,id,CodArtProv,CodSussan,Descripcion,Estacion,Grupo,Costo,CantDevuelta
        #0  1      2            3             4  5          6         7           8        9     10    11

        numeroPagina = 1
        nrosuc,nombresuc = utiles.datosSucursal()
        
        totalItemPorPagina = 50-6 #resto 6 estimando renglones de encabezado
        totalPaginas = len(items) / totalItemPorPagina 
        totalPaginas+= 1

        nombre = items[0]["nombre"]
        idproveedor = items[0]["idproveedor"]
        en1oen2 = 0
        marcaIVA = ""

        def encabezadoPagina(texto):
            fecha = utiles.obtenerFecha("d-m-Y")

            a = '<table width="100%" cellspacing="0" border="1"> \n'
            a+= '<tr><td> \n'
            a+= '<table width="100%" cellspacing="0" border="0"> \n'
            a+= '<tr> \n'
            a+= '<td valign="top" align="left" width="33%"> \n'
            a+= '<strong>SUSSAN S.R.L.<br> \n'
            a+= '<font size="1">General L&oacute;pez 3110 esq. Urquiza<br> \n'
            a+= 'SANTA FE - cp: S3000DCR<br> \n'
            a+= 'cuit: 30-71105924-1 web: http://www.sussanboutique.com.ar e-mail: sussanboutique@gmail.com</font></strong> \n'
            a+= '</td> \n'
            a+= '<td valign="top" align="right" width="33%">'+fecha+' \n'
            a+= '<br>P&aacute;gina '+str(numeroPagina)+' / '+str(totalPaginas)+'</td> \n'
            a+= '</tr> \n'
            a+= '</table> \n'
            a+= '</td></tr> \n'
            a+= '</table><br><div align="right"> \n'
            a+= '<strong>DEVOLUCION</strong></div><div align="left"> \n'
            a+= 'Proveedor: <strong>'+nombre+"</strong> / "+idproveedor+'<br> \n'
            if self.observaciones!="":
                a+= '<br>Motivo de la devoluci&oacute;n: '+self.observaciones
            a+= '</div><br> \n'
            texto+= a
            return texto
        
        def encabezadoTabla(texto):
        #ID,Nombre,FechaFactura,NumeroFactura,id,CodArtProv,CodSussan,Descripcion,Estacion,Grupo,Costo,CantDevuelta
        #0  1      2            3             4  5          6         7           8        9     10    11
            #a = '<hr>'
            a = ''

            a+= '<table width="100%" cellspacing="0" border="1"> \n'
            a+= '<tr> \n'
            a+= '<td valign="top" align="right"></td> \n'
            a+= '<td valign="top" align="right">C&oacute;digo<br>Proveedor</td> \n'
            a+= '<td valign="top" align="right">Nro.Factura</td> \n'
            a+= '<td valign="top" align="center">C&oacute;d.<br>Sussan</td> \n'
            a+= '<td valign="top" align="left">Descripci&oacute;n</td> \n'
            a+= '<td valign="top" align="right">Cant</td> \n'
            a+= '<td valign="top" align="right">Costo<br>Unidad</td> \n'
            a+= '<td valign="top" align="right">Subtotal</td> \n'
            a+= '</tr> \n'
            a+= '<tr> \n'
            a+= '<td colspan="8"></td> \n'
            a+= '</tr> \n'
            texto+= a
            return texto

        def piePagina(totalProductos,totalSubtotal,totalIVA,totalTotal):
        #ID,Nombre,FechaFactura,NumeroFactura,id,CodArtProv,CodSussan,Descripcion,Estacion,Grupo,Costo,CantDevuelta
        #0  1      2            3             4  5          6         7           8        9     10    11
            totalCantProductos = Decimal(str(totalProductos)).quantize(Decimal("0.10"))
            a = '<table width="100%" cellspacing="0" border="1"> \n'
            a+= '<tr><td> \n'
            a+= '<table width="100%" cellspacing="0" border="0"> \n'
            a+= '<tr> \n'
            a+= '<td valign="top" align="left" width="33%"> \n'
            a = '<tr> \n'
            a+= '<td valign="top" align="right" colspan="5">TOTALES</td> \n' #orden
            a+= '<td valign="top" align="right">'+str(totalCantProductos)+'</td> \n'
            a+= '<td valign="top" align="right"></td> \n'
            a+= '<td valign="top" align="right">'+str(totalSubtotal)+'</td> \n'
            a+= '</tr> \n'
            if marcaIVA=="*":
                a+= '<tr> \n'
                a+= '<td valign="top" align="right" colspan="7">IVA*</td> \n'
                a+= '<td valign="top" align="right">'+str(totalIVA)+'</td>'
                a+= '</tr>'
                a+= '<tr> \n'
                a+= '<td valign="top" align="right" colspan="7">TOTAL CON IVA</td> \n'
                a+= '<td valign="top" align="right">'+str(totalTotal)+'</td>'
                a+= '</tr>'
            a+= '</table> \n'
            a+= '</td></tr> \n'
            a+= '</table><br> \n'
            texto = a
            return texto
        
        cadena = '<?xml version="1.0" encoding="utf-8" ?> \n'
        cadena+= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> \n'
        cadena+= '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> \n'
        cadena+= '<head> \n'
        cadena+= '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> \n'
        cadena+= '<meta name="generator" content="Docutils 0.4.1: http://docutils.sourceforge.net/" /> \n'
        cadena+= '<title>Sussan Boutique</title> \n'
        cadena+= '</head> \n'
        cadena+= '<body> \n'

        cadena = encabezadoPagina(cadena)
        cadena = encabezadoTabla(cadena)
        f.write(cadena)

        renglon = 0

        totalProductos = 0
        totalSubtotal = Decimal("0.00")
        totalIVA = Decimal("0.00")
        totalTotal = Decimal("0.00")
        orden = 0
        
        for item in items:
        #ID,Nombre,FechaFactura,NumeroFactura,id,CodArtProv,CodSussan,Descripcion,Estacion,Grupo,Costo,CantDevuelta
        #0  1      2            3             4  5          6         7           8        9     10    11
            orden+= 1
            codsussan,codartproveedor = item["codsussan"].split(" / ")
            descripcion = item["descri"]
            cantidad = int(item["cantidad"])
            nrofactura = item["nrofactura"]
            totalProductos+= cantidad

            cantidad = Decimal(str(cantidad)).quantize(Decimal("0.10"))
            costounitario = Decimal(str(item["costo"])).quantize(Decimal("0.10"))
            subtotal = Decimal(str(cantidad*costounitario)).quantize(Decimal("0.10"))
            en1oen2 = item["en1oen2"]
            iva = Decimal("0.00")
            marca = ""
            if en1oen2==1:
                iva = Decimal(str(cantidad*costounitario*Decimal("21.00")/Decimal("100.00")))
                iva = iva.quantize(Decimal("0.10"))
                marcaIVA = "*"
                marca = marcaIVA
            else:
                marca = ""
            total = subtotal+iva
            total = total.quantize(Decimal("0.10"))
            
            totalSubtotal+= subtotal.quantize(Decimal("0.10"))
            totalIVA+= iva.quantize(Decimal("0.10"))
            totalTotal+= total.quantize(Decimal("0.10"))
        
            cadena = '<tr> \n'
            cadena+= '<td valign="top" align="right">'+str(orden)+'</td> \n'
            cadena+= '<td valign="top" align="right">'+codartproveedor+'</td> \n'
            cadena+= '<td valign="top" align="right">'+nrofactura+'</td> \n'
            cadena+= '<td valign="top" align="center">'+codsussan+'</td> \n'
            cadena+= '<td valign="center" align="left"><font size="2.5">'+descripcion+'</font></td> \n'
            cadena+= '<td valign="top" align="right">'+str(cantidad)+'</td> \n'
            cadena+= '<td valign="top" align="right">'+str(costounitario)+'</td> \n'
            cadena+= '<td valign="top" align="right">'+marca+' '+str(subtotal)+'</td> \n'
            cadena+= '</tr>\n'
            f.write(cadena)
            
            renglon+= 1
            
            if renglon == totalItemPorPagina :
                cadena = '</table> \n'
                cadena = piePagina(totalProductos,totalSubtotal,totalIVA,totalTotal)
                f.write(cadena)
                f.write("</table><!-- salto de pagina -->\n")
                f.write("<p STYLE='page-break-after: always;'></p>\n")
                renglon = 0
                numeroPagina+= 1
                cadena = encabezadoPagina("")
                cadena = encabezadoTabla(cadena)
                f.write(cadena)

        cadena = '</table> \n'
        cadena = piePagina(totalProductos,totalSubtotal,totalIVA,totalTotal)
        f.write(cadena)
        f.write("</table><!-- salto de pagina -->\n")
        f.write("<p STYLE='page-break-after: always;'></p>\n")

